home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 441 / dlibs12 / fputc.c < prev    next >
C/C++ Source or Header  |  1990-11-23  |  800b  |  40 lines

  1. #include <stdio.h>
  2.  
  3. int fputc(c, fp)
  4.     register unsigned char c;
  5.     register FILE *fp;
  6.     {
  7.     register int f, m, nl = FALSE, rv;
  8.  
  9.     f = (fp->_flag |= _IORW);
  10.     if(!(f & _IOWRT)            /* not opened for write? */
  11.     || (f & (_IOERR | _IOEOF)))        /* error/eof conditions? */
  12.         return(EOF);
  13.     if(fp->_base == NULL)    /* allocate a buffer if there wasn't one */
  14.         _getbuf(fp);
  15.     if(!(f & _IOBIN) && (c == '\n'))    /* NL -> CR+LF ? */
  16.         {
  17.         c = '\r';
  18.         nl = TRUE;
  19.         }
  20. _fputc:
  21.     *(fp->_ptr)++ = c;
  22.     if((++(fp->_cnt)) >= fp->_bsiz)
  23.         {
  24.         fp->_cnt = 0;
  25.         fp->_ptr = fp->_base;
  26.         m = fp->_bsiz;
  27.         if((rv = write(fp->_file, fp->_base, m)) != m)
  28.             {
  29.             fp->_flag |= _IOERR;
  30.             return(EOF);
  31.             }
  32.         }
  33.     if(nl && (c == '\r'))            /* NL -> CR+LF ? */
  34.         {
  35.         c = '\n';
  36.         goto _fputc;
  37.         }
  38.     return(c);
  39.     }
  40.